package main.java.br.com.projeto.domain.entity;

import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

@Entity
public class Compra extends Nota {
	/**
	 * 
	 */
	private static final long serialVersionUID = 8933094402891935334L;
	
	@EmbeddedId
	private NotaPK notaPK;
	
	@Temporal(TemporalType.TIMESTAMP)
	@Column(nullable=false)
	private Date chegada;
	
	@Id
	@ManyToOne(fetch=FetchType.EAGER, optional=false)
	private Fornecedor fornecedor;
	
	@Enumerated(EnumType.ORDINAL)
	private Status status;

	@Transient
	private List<ItemCompra> itensCompra;
	
	@Column
	private Double bcIcms;

	@Column
	private Double valorIcms;

	@Column
	private Double bcIcmsSubs;

	@Column
	private Double valorIcmsSubs;

	@Column
	private Double valorFrete;

	@Column
	private Double valorSeguro;

	@Column
	private Double desconto;

	@Column
	private Double outrasDespesas;

	@Column
	private Double valorIpi;
	
	public Fornecedor getFornecedor() {
		return fornecedor;
	}

	public void setFornecedor(Fornecedor fornecedor) {
		this.fornecedor = fornecedor;
	}

	public List<ItemCompra> getItensCompra() {
		return itensCompra;
	}

	public void setItensCompra(List<ItemCompra> itensCompra) {
		this.itensCompra = itensCompra;
	}

	public NotaPK getNotaPK() {
		return notaPK;
	}

	public void setNotaPK(NotaPK notaPK) {
		this.notaPK = notaPK;
	}

	public Date getChegada() {
		return chegada;
	}

	public void setChegada(Date chegada) {
		this.chegada = chegada;
	}
	
	public void calculaTotalNota() 
	{
		this.setTotalNota((double) 0);

		for ( ItemCompra item : this.itensCompra )
		{
			this.setTotalNota( this.getTotalNota() + item.getTotal() );
		}
	}

	public Status getStatus() {
		return status;
	}

	public void setStatus(Status status) {
		this.status = status;
	}

		public Double getBcIcms() {
		return bcIcms;
	}

	public void setBcIcms(Double bcIcms) {
		this.bcIcms = bcIcms;
	}

	public Double getValorIcms() {
		return valorIcms;
	}

	public void setValorIcms(Double valorIcms) {
		this.valorIcms = valorIcms;
	}

	public Double getBcIcmsSubs() {
		return bcIcmsSubs;
	}

	public void setBcIcmsSubs(Double bcIcmsSubs) {
		this.bcIcmsSubs = bcIcmsSubs;
	}

	public Double getValorIcmsSubs() {
		return valorIcmsSubs;
	}

	public void setValorIcmsSubs(Double valorIcmsSubs) {
		this.valorIcmsSubs = valorIcmsSubs;
	}

	public Double getValorFrete() {
		return valorFrete;
	}

	public void setValorFrete(Double valorFrete) {
		this.valorFrete = valorFrete;
	}

	public Double getValorSeguro() {
		return valorSeguro;
	}

	public void setValorSeguro(Double valorSeguro) {
		this.valorSeguro = valorSeguro;
	}

	public Double getDesconto() {
		return desconto;
	}

	public void setDesconto(Double desconto) {
		this.desconto = desconto;
	}

	public Double getOutrasDespesas() {
		return outrasDespesas;
	}

	public void setOutrasDespesas(Double outrasDespesas) {
		this.outrasDespesas = outrasDespesas;
	}

	public Double getValorIpi() {
		return valorIpi;
	}

	public void setValorIpi(Double valorIpi) {
		this.valorIpi = valorIpi;
	}

	public void calculaImposto()
	{
		this.setBcIcms( Double.valueOf(0) );
		this.setBcIcmsSubs( Double.valueOf(0) );
		this.setValorIcms( Double.valueOf(0) );
		this.setValorIcmsSubs( Double.valueOf(0) );
		this.setValorIpi( Double.valueOf(0) );
		
		for ( ItemCompra item : this.itensCompra )
		{
			if ( item.getBcIcms() != null )
			{
				this.setBcIcms( this.getBcIcms() + item.getBcIcms() );
			}
			if ( item.getValorIcms() != null )
			{
				this.setValorIcms( this.getValorIcms() + item.getValorIcms() );
			}
			if ( item.getBcIcmsSubs() != null )
			{
				this.setBcIcmsSubs( this.getBcIcmsSubs() + item.getBcIcmsSubs() );
			}
			if ( item.getValorIcmsSubs() != null )
			{
				this.setValorIcmsSubs( this.getValorIcmsSubs() + item.getValorIcmsSubs() );
			}
			if ( item.getValorIpi() != null )
			{
				this.setValorIpi( this.getValorIpi() + item.getValorIpi() );
			}
		}
	}
	
	public Float getTotalItensNota()
	{
		float valor = 0;
		for ( ItemCompra item : this.itensCompra )
		{
			valor += item.getTotal() ;
		}
		return valor;
	}
	
}
